package main

import (
	"fmt"
)

func main() {
	nums := []int{1, 1, 1}
	fmt.Println(minMoves(nums))
}

//thought: 因为只需要找出让数组所有元素相等的最小操作次数，所以我们不需要考虑数组中各个元素的绝对大小，即不需要真正算出数组中所有元素相等时的元素值，只需要考虑数组中元素相对大小的变化即可。
//因此，每次操作既可以理解为使 n-1 个元素增加 1，也可以理解使 1 个元素减少 1。显然，后者更利于我们的计算。

//#link: https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/
func minMoves(nums []int) (ans int) {
	min := nums[0]
	for _, num := range nums[1:] {
		if num < min {
			min = num
		}
	}
	for _, num := range nums {
		ans += num - min
	}
	return
}
